package com.im.service.message.service;

import com.im.common.model.ClientInfo;
import com.im.common.model.RestResponse;
import com.im.common.model.message.MessageContent;
import com.im.service.message.model.req.SendMessageReq;
import com.im.service.message.model.resp.SendMessageResp;

import java.util.List;

public interface P2PMessageService {

    /**
     * 处理消息
     *
     * @param messageContent 消息内容
     */
    void process(MessageContent messageContent);

    /**
     * 分发消息给在线客户端
     *
     * @param messageContent 消息内容
     * @return 在线客户端列表
     */
    List<ClientInfo> dispatchMessage(MessageContent messageContent);

    /**
     * 发送ack消息
     *
     * @param messageContent 消息内容
     * @param responseVO     响应结果
     */
    void ack(MessageContent messageContent, RestResponse responseVO);

    /**
     * 发送接收确认给发送方
     *
     * @param messageContent 消息内容
     */
    void receiverAck(MessageContent messageContent);

    /**
     * 同步消息给发送方在线客户端
     *
     * @param messageContent 消息内容
     * @param clientInfo     客户端信息
     */
    void syncToSender(MessageContent messageContent, ClientInfo clientInfo);

    /**
     * 检查发送方和接收方的权限
     *
     * @param fromId 发送方ID
     * @param toId   接收方ID
     * @param appId  应用ID
     * @return 响应结果
     */
    void imServerPermissionCheck(String fromId, String toId, Integer appId);

    /**
     * 发送消息
     *
     * @param req 请求参数
     * @return 发送结果
     */
    SendMessageResp send(SendMessageReq req);

}
